/**
 * 原始类型：
 *      和js一样：number string symbol,undefined ,null boolean
 *      新增：
 *          void:  空。没有返回值
 */

export { };

//：void 表示该函数没有返回值，要是加返回就会报错
function fn(): void {
    //如果强行return 就会报错
    //return 123;
}

function fn2(): undefined {
    //js里面如果默认函数没有return就是undefined,但是如果约束了函数返回是undefined 就必须要返回。
    return undefined;
}

//但是如果声明一个变量是：void，只能赋值为undefined   void是类型，undefined是值
let a: void = undefined;


/**
 * ts新增类型：
 *      any：表示任意类型、 不推荐使用。一旦使用了any类型就会跳过ts的类型检查
 *      unknown：表示未知类型
 */
//这里就不做任何类型校验
let c: any;
c = 123;
c = 'hello';
c = true;
c = {};   //对象。

let d: unknown;
d = 123;
d = 'hello';
d = true;
d = {};   //对象。
//console.log(d.xxx);   //这杨就点不出类型，报错了。
//可以通过类型收缩在进行 点 操作
(d as number).toFixed();   //类型收缩，断言成number类型。


/**
 * ts中新增的类型：
 *      never: 表示从不会出现的值
 * 
 */
function fn3() {   // :never
    throw new Error('错误'); //当执行到这里的时候，函数报错，后面的代码不会执行。
    return 1;  //这里的代码永远不会执行
}